#ifndef _MODBUS_SLAVE_MID_H_
#define _MODBUS_SLAVE_MID_H_

#include <stdint.h>
#include <stdbool.h>
#include "mb.h"

#define MB_R (1<<0)  // 读权限
#define MB_W (1<<1)  // 写权限

typedef struct {
    uint8_t  property;				 // 寄存器权限 R(只读)/W(可写) 或组合
    uint16_t address;			 // Modbus 寄存器地址（16进制，对应协议中的 "寄存器地址"）
    uint16_t minValue;				 // 最小值  向寄存器中写数据时 数据的最小值
    uint16_t maxValue;				 // 最大值  向寄存器中读数据时 数据的最小值
    void (*ReadCb)(uint16_t* value); // 寄存器读数据处理函数
    void (*WriteCb)(uint16_t value); // 寄存器写数据处理函数
} MbRegisterInstance_t;

typedef struct {
    uint8_t slaveAddr;      //从机地址
    uint32_t baudRate;      //波特率
} ModbusSlaveInstance_t;

/**
 * @desc  : 寄存器实例注册
 * @date  : 2025-04-15
 * @author: AnRui
 * @param : property - {参数说明}:
 * @param : address - {参数说明}:
 * @param : minValue - {参数说明}:
 * @param : maxValue - {参数说明}:
 * @param : ReadCb - {参数说明}:
 * @param : WriteCb - {参数说明}:
 * @return: bool
 * @note  :
 */
bool RegInstanceArrReg(MbRegisterInstance_t mbRegisterInstance);

/**
 * @desc  : modbus从机初始化
 * @date  : 2025-04-15
 * @author: AnRui
 * @param : mbInstance - {参数说明}:
 * @note  : 传入结构体 ModbusSlaveInstance_t 里面定义了 读写功能码 对应的处理函数
 */
void ModbusSlaveInit(ModbusSlaveInstance_t* mbInstance);



/**
 * @desc  : Modbus轮询调度
 * @date  : 2025-04-15
 * @author: AnRui
 * @note  :
 */
void ModbusSlavePoll(void);


#endif
